package de.fuberlin.inf.alp2;

import de.fuberlin.inf.alp2.utils.ConsoleInput;

public class testLanguage {

	private static int zustand;
	private static String wort;
	
	public static void main(String[] args) {
		testLanguage.zustand = 0;
		testLanguage.wort = ConsoleInput.readString("Geben Sie das Wort ein.");
		try {
			if (testLanguage.isValid())
				System.out.println("Wort akzeptiert.");
			else
				System.out.println("Wort nicht akzeptiert.");
		}
		catch (StringIndexOutOfBoundsException exc) {
			System.out.println("Wort nicht akzeptiert.");
		}
	}
	
	private static boolean isValid() throws StringIndexOutOfBoundsException {
		switch (testLanguage.zustand) {
		case 0:
			switch (testLanguage.wort.charAt(0)) {
			case 'a':
				testLanguage.zustand = 1;
				testLanguage.wort = testLanguage.wort.substring(1);
				return testLanguage.isValid();
			case 'c':
				testLanguage.zustand = 2;
				testLanguage.wort = testLanguage.wort.substring(1);
				return testLanguage.isValid();
			default:
				return false;
			}
		case 1:
			switch (testLanguage.wort.charAt(0)) {
			case 'b':
				testLanguage.zustand = 1;
				testLanguage.wort = testLanguage.wort.substring(1);
				return testLanguage.isValid();
			case 'c':
				testLanguage.zustand = 2;
				testLanguage.wort = testLanguage.wort.substring(1);
				return testLanguage.isValid();
			default:
				return false;
			}
		case 2:
			if (testLanguage.wort.length() == 0)
				return true;
			else
				return false;
		default:
			return false;
		}
	}
}
